<?php
namespace app\common\tool;
use phpmailer\phpmailer;
use think\Config;
/**
 * 邮件发送类
 */
class Email
{
    /**
     * 邮件发送分发
     * @param string $type
     * @param string $title
     */
    public function handle_send($type, $data)
    {
        
        $email      = $data['to_email'];    //发送给 邮箱
        $username   = $data['to_username']; //发送给 名字

        switch (strtoupper($type)) {
            case 'ROLLBACK_TO_CREATE_USER': //回退至发起人
                $task_name          = $data['task_name'];
                $charge_username    = $data['charge_username'];
                $rollback_time      = $data['rollback_time'];
                $reason             = $data['reason'];
                $title  = '【创意任务通知】任务已回退至发起人' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "您发起的任务 <b>{$task_name}</b> 已被退回至您。以下是回退的详细信息：<br>".
                            "<b>当前状态：</b> 负责人回退<br>".
                            "<b>回退人：</b>   {$charge_username}<br>".
                            "<b>回退原因：</b>   {$reason}<br>".
                            "<b>回退时间：</b> {$rollback_time}<br>".
                            "请您根据回退原因对任务内容进行调整，并重新提交任务以继续流程。如有任何疑问，您可以直接联系相关发起人。<br>".
                            "感谢您的配合！<br>";
                break;
            case 'ROLLBACK_TO_CHARGE_USER': //回退至负责人
                $task_name          = $data['task_name'];
                $create_username    = $data['create_username'];
                $rollback_time      = $data['rollback_time'];
                $reason             = $data['reason'];
                $title  = '【创意任务通知】任务被退回至负责人 - ' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "您负责的任务 <b>{$task_name}</b> 已被退回至您。以下是任务的详细信息：<br>".
                            "<b>当前状态：</b> 发起人回退<br>".
                            "<b>回退人：</b>   {$create_username}<br>".
                            "<b>回退原因：</b>   {$reason}<br>".
                            "<b>回退时间：</b> {$rollback_time}<br>".
                            "请您根据回退原因对任务内容进行调整，并重新提交任务以继续流程。如有任何疑问，您可以直接联系相关任务发起人。<br>".
                            "感谢您的配合！<br>";
                break;
            case 'TASK_HAS_EXPIRED':        //任务已过期
                $task_name          = $data['task_name'];
                $finish_date        = $data['finish_date'];
                $title  = '【创意任务通知】任务已过期 - ' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "您负责的任务 <b>{$task_name}</b> 因超出预计有效期已自动标记为“已过期”。请注意以下信息：<br>".
                            "<b>过期时间：</b>   {$finish_date}<br>".
                            "<b>过期原因：</b> 超出预计有效期，未执行操作。<br>".
                            "如仍需继续该任务，请重新创建任务记录，并确保在有效期内完成各流程。<br>".
                            "感谢您的理解和配合！<br>";
                break;
            case 'TASK_IS_IN_PRODUCTION':   //任务生产中
                $task_name          = $data['task_name'];
                $create_username    = $data['create_username'];
                $charge_username    = $data['charge_username'];
                $accept_time        = $data['accept_time'];
                $title  = '【创意任务通知】任务已接受 - ' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "您发起的任务 <b>{$task_name}</b> 已被相关负责人接受，任务状态已更新为“制作中”。以下是详细信息<br>".
                            "<b>当前状态：</b> 制作中<br>".
                            "<b>发起人：</b>   {$create_username}<br>".
                            "<b>接受人：</b>   {$charge_username}<br>".
                            "<b>接受时间：</b> {$accept_time}<br>".
                            "任务正在积极进行中。您可以通过系统查看任务的最新进展。如有任何问题，请随时与负责人联系。<br>".
                            "感谢您的理解和配合！<br>";
                break;
            case 'TASK_IS_UNDER_REVIEW':    //任务待审核
                $task_name          = $data['task_name'];
                $charge_username    = $data['charge_username'];
                $submit_time        = $data['submit_time'];
                $title  = '【创意任务通知】任务待审核 - ' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "任务 <b>{$task_name}</b> 已进入“待审核”状态，现等待您的审核。以下是任务的详细信息：<br>".
                            "<b>当前状态：</b> 待审核<br>".
                            "<b>提交人：</b>   {$charge_username}<br>".
                            "<b>提交时间：</b> {$submit_time}<br>".
                            "任务已成功结束，感谢您对项目的支持。如有任何反馈或问题，欢迎随时联系我们。<br>".
                            "感谢您的理解和配合！<br>";
                break;
            case 'TASK_IS_COMPLETED':       //任务已完成
                $task_name          = $data['task_name'];
                $create_username    = $data['create_username'];
                $title  = '【创意任务通知】任务已完成 - ' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "您负责的任务 <b>{$task_name}</b> 已通过审核并标记为“已完成”。以下是任务完成的详细信息：<br>".
                            "<b>当前状态：</b> 已完成<br>".
                            "<b>审核人：</b>   {$create_username}<br>".
                            "任务已成功结束，感谢您对项目的支持。如有任何反馈或问题，欢迎随时联系我们。<br>".
                            "感谢您的理解和配合！<br>";
                break;
            case 'TASK_IS_REFUSED':         //任务已拒绝
                $task_name          = $data['task_name'];
                $charge_username    = $data['charge_username'];
                $refuse_time        = $data['refuse_time'];
                $reason             = $data['reason'];
                $title  = '【创意任务通知】任务已拒绝 - ' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "很遗憾地通知您，任务 <b>{$task_name}</b> 已被审核人拒绝，任务状态已更新为“已拒绝”。以下是详细信息：<br>".
                            "<b>当前状态：</b> 已拒绝<br>".
                            "<b>拒绝人：</b>   {$charge_username}<br>".
                            "<b>拒绝时间：</b> {$refuse_time}<br>".
                            "<b>拒绝原因：</b> {$reason}<br>".
                            "请根据拒绝原因进行复盘，并根据需要重新发起任务。如有任何疑问，可以直接与审核人联系。<br>".
                            "感谢您的理解和配合！<br>";
                break;
            case 'TASK_IS_WAITING_ACCEPT':  //任务待接受
                $task_name          = $data['task_name'];
                $create_username    = $data['create_username'];
                $create_time        = $data['create_time'];
                $title  = '【创意任务通知】新任务待接受 - ' . $task_name;
                $text   =   "<b>正文：</b><br>".
                            "有一个新的任务 <b>{$task_name}</b> 需要您的接受。请您尽快查看任务详情并选择是否接受。以下是任务的相关信息：<br>".
                            "<b>当前状态：</b> 待接受<br>".
                            "<b>发起人：</b>   {$create_username}<br>".
                            "<b>创建时间：</b> {$create_time}<br>".
                            "您可以在系统中查看任务详细内容，并根据需求进行确认或回退操作。如需调整任务内容，可与发起人联系协商。<br>".
                            "请在预计的时间范围内完成接受操作，以确保任务顺利进行。<br>".
                            "感谢您的配合！";    
                break;
            default:
                throw new \Exception('错误的发送类型');
                break;
        }
        return $this->send($title, $text, $email, $username);
    }
    /**
     * 发送邮件公共方法
     * @param string $title
     * @param string $text
     * @param string $email
     * @param string $username
     */
    public function send($title, $text, $email, $username)
    {
        $mail = new PHPMailer();
        // 使用SMTP服务
        $mail->isSMTP();
        // 编码格式为utf8，不设置编码的话，中文会出现乱码   
        $mail->CharSet      = Config::get('email.CharSet'); 
        // 发送方的SMTP服务器地址
        $mail->Host         = Config::get('email.Host');
        // 是否使用身份验证    
        $mail->SMTPAuth     = Config::get('email.SMTPAuth');
        // 发送方的163邮箱用户名，就是你申请163的SMTP服务使用的163邮箱</span><span style="color:#333333;"> 
        $mail->Username     = Config::get('email.Username');
        // 发送方的邮箱密码，注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码！</span><span style="color:#333333;">  
        $mail->Password     = Config::get('email.Password'); 
        // 使用ssl协议方式</span><span style="color:#333333;">
        $mail->SMTPSecure   = Config::get('email.SMTPSecure');   
        // 163邮箱的ssl协议方式端口号是465/994 
        $mail->Port         = Config::get('email.Port'); 
        // 设置发件人信息，如邮件格式说明中的发件人，这里会显示为Mailer(xxxx@163.com），Mailer是当做名字显示
        $mail->setFrom(Config::get('email.From'),Config::get('email.FromName')); 
        // 设置收件人信息，如邮件格式说明中的收件人，这里会显示为Liang(yyyy@163.com)  
        $mail->addAddress($email,$username);
        // // 设置html格式
        $mail->isHTML(true);
        // 邮件标题    
        $mail->Subject      = $title;
        // 邮件正文 
        $mail->Body         = $text;
        $result             = $mail->send();
        return $result;
    }
}